package fr.esisar.cs420.swt;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.SWTResourceManager;

import fr.esisar.cs420.traitement.Album;
import fr.esisar.cs420.traitement.Images;
import fr.esisar.cs420.traitement.InfoImage;



public class AjouterPhoto extends Shell {
	
	private Text chemin;
	private Text erreur;
	
	private String cheminImage ;
	
	private int idImage = 1;
	
	private int sauvIdImage ;
	
	private Label lblVisualisation ;
	
	private InfoImage image ;
	
	/**
	 * Create the shell.
	 * @param display
	 */
	public AjouterPhoto(final Display display, final int idAlbum) {
		super(display, SWT.SHELL_TRIM);
		
		Group grpcheminImage = new Group(this, SWT.NONE);
		grpcheminImage.setLocation(22, 10);
		grpcheminImage.setSize(440, 100);
		grpcheminImage.setText("Choisir une nouvelle image");
		
		chemin = new Text(grpcheminImage, SWT.BORDER);
		chemin.setBounds(10, 32, 289, 21);
		
		Button btnExplorer = new Button(grpcheminImage, SWT.NONE);
		btnExplorer.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				

					FileDialog leDialogue = new FileDialog(getShell(), SWT.OPEN);
					leDialogue.setText("Sélectionnez un dossier");
					try
					{
						chemin.setText(leDialogue.open());
						
					}//try
					catch (IllegalArgumentException e1) {}//catch
			
		}});
		btnExplorer.setBounds(322, 30, 75, 25);
		btnExplorer.setText("Parcourir\r\n");
		
		Button btnOk = new Button(grpcheminImage, SWT.NONE);
		
		btnOk.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				if(chemin.getText().equals(""))
				{
					erreur.setText("Erreur :\r\n Aucun chemin selectionné ");	
				}
				else if (Album.isAlreadyLoad(chemin.getText())){
					
					erreur.setText("Erreur :\r\n Le photo selectionné est déja dans votre base de donnée ");	
					chemin.setText("");
					
				}
				else{
					Album.ajouterPhoto(idAlbum, chemin.getText());
					fermer();
					
				}
					
				
			}
		});
		btnOk.setBounds(266, 65, 75, 25);
		btnOk.setText("Go\r\n");
		
		Label lblTlchargerLimage = new Label(grpcheminImage, SWT.NONE);
		lblTlchargerLimage.setBounds(148, 70, 118, 15);
		lblTlchargerLimage.setText("Télécharger l'image");
		
		Group grpChoisirUneImage = new Group(this, SWT.NONE);
		grpChoisirUneImage.setText("Choisir une image déja enregistrée");
		grpChoisirUneImage.setBounds(22, 157, 440, 480);
		
	    lblVisualisation = new Label(grpChoisirUneImage, SWT.NONE);
		lblVisualisation.setBounds(10, 31, 400, 400);
		
		Button button = new Button(grpChoisirUneImage, SWT.NONE);
		button.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				idImage--;
				
				erreur.setText("");	
				
				image = Images.afficherImage(idImage);
								
				if(image == null){
					
					erreur.setText("Information :\r\n Il n'y a pas / ou plus de photos enregistrées ");	
					
					idImage++ ;
					
					image = Images.afficherImage(idImage);
					
					if(image!=null){
						cheminImage = image.getChemin() ;
						sauvIdImage = image.getIdImage() ;
					}
					
				}
				else{
				
				cheminImage = image.getChemin() ;
				sauvIdImage = image.getIdImage() ;
				loadImage(display,cheminImage);
				
				}
				
				
			}
		});
		button.setText("Image précédente");
		button.setBounds(10, 446, 109, 25);
		
		Button button_1 = new Button(grpChoisirUneImage, SWT.NONE);
		button_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				idImage++;
				
				erreur.setText("");	
				
				image = Images.afficherImage(idImage);
								
				if(image == null){
					
					erreur.setText("Information :\r\n Il n'y a pas / ou plus de photos enregistrées ");	
					
					idImage-- ;
					
					image = Images.afficherImage(idImage);
					
					if(image!=null){
						cheminImage = image.getChemin() ;
						sauvIdImage = image.getIdImage() ;
					}
					
				}
				else{
				
				cheminImage = image.getChemin() ;
				sauvIdImage = image.getIdImage() ;
				loadImage(display,cheminImage);
				
				}
			}
		});
		button_1.setText("Image suivante");
		button_1.setBounds(310, 446, 109, 25);
		
		Button btnChoisirLimage = new Button(grpChoisirUneImage, SWT.NONE);
		btnChoisirLimage.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				
				if(cheminImage == null)
				{
					erreur.setText("Erreur :\r\n Pas de photos enregistrés ");	
				}else if(Album.isAlreadyLoad(cheminImage,idAlbum, sauvIdImage)){
					
					erreur.setText("Erreur :\r\n Cette photo est déja dans votre album ou livre");
			    }
				else{
					Album.ajouterPhoto(idAlbum, cheminImage);
					fermer();
				}
				
			}
		});
		btnChoisirLimage.setText("Choisir l'image");
		btnChoisirLimage.setBounds(141, 446, 140, 25);
		
		erreur = new Text(this, SWT.CENTER | SWT.MULTI);
		erreur.setBounds(80, 121, 319, 30);
		erreur.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
		createContents();
		
		image = Images.afficherImage(idImage);
		
		if(image == null){
			
			erreur.setText("Information :\r\n Il n'y a pas / ou plus de photos enregistrées ");			
		}
		else{			
			cheminImage = image.getChemin() ;
			sauvIdImage = image.getIdImage() ;
			loadImage(display,cheminImage);
		}
	}

	/**
	 * Create contents of the shell.
	 */
	protected void createContents() {
		setText("Ajouter une photo");
		setSize(496, 685);

	}
	
	protected void fermer() {
		this.dispose();
	}

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
	
	private void loadImage(final Display display, String cheminImage){
			
		Image imageVisualisation = new Image(display,cheminImage) ;
		
		imageVisualisation = resize(imageVisualisation,400,400);
		
		lblVisualisation.setImage(imageVisualisation);
	
	}
	
	private Image resize(Image image, int width, int height) {
		
		Image scaled = new Image(Display.getDefault(), width, height);
		GC gc = new GC(scaled);
		gc.setAntialias(SWT.ON);
		gc.setInterpolation(SWT.HIGH);
		gc.drawImage(image, 0, 0, 
		image.getBounds().width, image.getBounds().height, 
		0, 0, width, height);
		gc.dispose();
		image.dispose(); // don't forget about me!
		return scaled;
		}

}
